package com.fanxin.app.fx.others; import internal.org.apache.http.entity.mime.MultipartEntity; import internal.org.apache.http.entity.mime.content.FileBody; import internal.org.apache.http.entity.mime.content.StringBody; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.CoreConnectionPNames; import com.alibaba.fastjson.JSONException; import com.alibaba.fastjson.JSONObject; import android.annotation.SuppressLint; import android.content.Context; import android.os.Handler; import android.os.Message; import android.widget.Toast; /** * 图片异步加载类 * * @author Leslie.Fang * */ public class LoadDataFromServer { private String url; private Map<String, String> map = null; private List<String> members = new ArrayList<String>(); // 是否包含数组,默认是不包含 private boolean has_Array = false; Context context; public LoadDataFromServer(Context context, String url, Map<String, String> map) { this.url = url; this.map = map; has_Array = false; this.context = context; } // public LoadDataFromServer(Context context, String url, Map<String, String> map, List<String> members) { this.url = url; this.map = map; this.members = members; has_Array = true; } @SuppressLint("HandlerLeak") public void getData(final DataCallBack dataCallBack) { final Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 111 && dataCallBack != null) { JSONObject jsonObject = (JSONObject) msg.obj; dataCallBack.onDataCallBack(jsonObject); } else { Toast.makeText(context, "服务器访问失败!", Toast.LENGTH_LONG).show(); return; // JSONObject jsonObject = null; // dataCallBack.onDataCallBack(jsonObject); } } }; new Thread() { @SuppressWarnings("rawtypes") public void run() { HttpClient client = new DefaultHttpClient(); MultipartEntity entity = new MultipartEntity(); Set keys = map.keySet(); if (keys != null) { Iterator iterator = keys.iterator(); while (iterator.hasNext()) { String key = (String) iterator.next(); String value = (String) map.get(key); if (key.equals("file")) { File file = new File(value); entity.addPart(key, new FileBody(file)); } else { try { entity.addPart(key, new StringBody(value, Charset.forName("UTF-8"))); System.out.println("key---->>>>" + key + "------value---->>>>" + value); } catch (UnsupportedEncodingException e) { e.printStackTrace(); Message msg = new Message(); msg.what = 222; msg.obj = null; handler.sendMessage(msg); } } } } // 如果包含数组,要把包含的数组放进去,项目目前只有members这个数组,所有固定键值,为了更灵活 // 可以将传入自定义的键名...... if (has_Array) { for (int i = 0; i < members.size(); i++) { try { entity.addPart( "members[]", new StringBody(members.get(i), Charset .forName("UTF-8"))); } catch (UnsupportedEncodingException e) { Message msg = new Message(); msg.what = 222; msg.obj = null; handler.sendMessage(msg); e.printStackTrace(); } } } client.getParams().setParameter( CoreConnectionPNames.CONNECTION_TIMEOUT, 30000); // 请求超时 client.getParams().setParameter( CoreConnectionPNames.SO_TIMEOUT, 30000); HttpPost post = new HttpPost(url); post.setEntity(entity); StringBuilder builder = new StringBuilder(); try { HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { BufferedReader reader = new BufferedReader( new InputStreamReader(response.getEntity() .getContent(), Charset.forName("UTF-8"))); for (String s = reader.readLine(); s != null; s = reader .readLine()) { builder.append(s); } String builder_BOM = jsonTokener(builder.toString()); System.out.println("返回数据是------->>>>>>>>" + builder.toString()); try { JSONObject jsonObject = new JSONObject(); jsonObject = JSONObject.parseObject(builder_BOM); Message msg = new Message(); msg.what = 111; msg.obj = jsonObject; handler.sendMessage(msg); } catch (JSONException e) { Message msg = new Message(); msg.what = 222; msg.obj = null; handler.sendMessage(msg); e.printStackTrace(); } } } catch (ClientProtocolException e) { Message msg = new Message(); msg.what = 222; msg.obj = null; handler.sendMessage(msg); e.printStackTrace(); } catch (IOException e) { Message msg = new Message(); msg.what = 222; msg.obj = null; handler.sendMessage(msg); e.printStackTrace(); } } }.start(); } private String jsonTokener(String in) { // consume an optional byte order mark (BOM) if it exists if (in != null && in.startsWith("\ufeff")) { in = in.substring(1); } return in; } /** * 网路访问调接口 * */ public interface DataCallBack { void onDataCallBack(JSONObject data); } }